/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Servlets;

import Conexion.Conexion;
import RRHH_MODELO.RHH_DATOS;
import RRHH_MODELO.RHH_PERSONA;
import RRHH_MODELO.RHH_PERSONA_DATOS;
import RRHH_MODELO.RHH_PERSONA_PROFESION;
import RRHH_MODELO.RHH_POSTULADO;
import RRHH_MODELO.RHH_POSTULADO_CONVOCATORIA;
import it.sauronsoftware.ftp4j.*;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.sql.SQLException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;


/**
 *
 * @author equipo_4
 */
@MultipartConfig
@WebServlet(name = "perfil_controller", urlPatterns = {"/perfil_controller"})
public class perfil_controller extends HttpServlet {

    /**
     * Processes requests for both HTTP
     * <code>GET</code> and
     * <code>POST</code> methods.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */      
    
    public void init( ){
      // Get the file location where it would be stored.
   }

    
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
            /* TODO output your page here. You may use following sample code. */
            out.println("<!DOCTYPE html>");
            out.println("<html>");
            out.println("<head>");
            out.println("<title>Servlet perfil_controller</title>");            
            out.println("</head>");
            out.println("<body>");
            out.println("<h1>Servlet perfil_controller at " + request.getContextPath() + "</h1>");
            out.println("</body>");
            out.println("</html>");
        } finally {            
            out.close();
        }
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
     * Handles the HTTP
     * <code>GET</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
    }

    /**
     * Handles the HTTP
     * <code>POST</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        Conexion con = new Conexion();
        String html="";
        try {
            String evento = request.getParameter("proceso");         
                        switch (evento) 
            {
                case "cargarkardex":            
                    html=cargarkardex(request,con);                    
                    break;
                case "modificarempleado":            
                    html=modificarempleado(request,con);                    
                    break;
                case "postular":            
                    postular(request,con);                    
                    break;
            }
            
        } catch (Exception ex) {
            con.rollback();
            html="false";
        }
        response.setCharacterEncoding("UTF-8");
        response.setContentType("text/plain");
        response.getWriter().write(html);
        con.Close();
    }

    /**
     * Returns a short description of the servlet.
     *
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>

    
    
    private String cargarkardex(HttpServletRequest request, Conexion con) throws SQLException, IOException, ServletException {
        int id=Integer.parseInt(request.getParameter("id"));
        RHH_PERSONA persona=new RHH_PERSONA(con);
        persona=persona.BuscarxID(id);
        RHH_DATOS dato=new RHH_DATOS(con);
        List<RHH_PERSONA_DATOS> listdato = new RHH_PERSONA_DATOS(con).BuscarXidPersona(id); 
        String listaDatos="";
        for (int i = 0; i < listdato.size(); i++) 
        {
            dato=dato.BuscarXid(listdato.get(i).getID_DATOS());
            
            listaDatos+="[\""+listdato.get(i).getID_DATOS()+"\",\""+listdato.get(i).getDATO()+"\",\""+dato.getTIPO()+"\",\""+listdato.get(i).getCADUCIDAD()+"\",\""+dato.getESTADO_CADUCIDAD()+"\"],";
        }
        RHH_PERSONA_PROFESION personaProfesion=new RHH_PERSONA_PROFESION(con);
        personaProfesion=personaProfesion.BuscarXpersona(id);
        String profe=personaProfesion!=null?personaProfesion.getID_PROFESION()+"":"0";
        String ano=personaProfesion!=null?personaProfesion.getANOS_EXPERIENCIA()+"":"0";
        if(listaDatos.length()>0)listaDatos=listaDatos.substring(0,listaDatos.length()-1);
        String html="{\"ci\":\""+persona.getCI()+"\",\"nombre\":\""+persona.getPRIMER_NOMBRE()
                    +"\",\"nombre2\":\""+persona.getSEGUNDO_NOMBRE()+"\",\"apellido1\":\""+persona.getPRIMER_APELLIDO()
                    +"\",\"apellido2\":\""+persona.getSEGUNDO_APELLIDO()+"\",\"curriculo\":\""+persona.getCURRICULUM()
                    +"\",\"correo\":\""+persona.getEMAIL()+"\",\"telefono\":\""+persona.getTELEFONO()
                    +"\",\"regional\":\""+persona.getLUGAR_EMISION()+"\",\"año\":\""+ano+"\",\"profesion\":\""+profe+"\",\"listadatos\":["+listaDatos+"]}";
        
        return html;
    }
    private void postular(HttpServletRequest request, Conexion con) throws SQLException {
        int tipo = Integer.parseInt(request.getParameter("tipo"));
        int conv = Integer.parseInt(request.getParameter("conv"));
        int post = Integer.parseInt(request.getParameter("post"));
        if(tipo==0)
        {
                 RHH_POSTULADO_CONVOCATORIA postu = new RHH_POSTULADO_CONVOCATORIA(post, conv);
                 postu.setCon(con);
                 postu.Insertar();
        }
        else
        {
                 RHH_POSTULADO_CONVOCATORIA postu = new RHH_POSTULADO_CONVOCATORIA(post, conv);
                 postu.setCon(con);
                 postu.Eliminar();
        }
        con.Close();        
   }
    private String modificarempleado(HttpServletRequest request, Conexion con) throws SQLException, IOException, ServletException, ParseException, IllegalStateException, FTPIllegalReplyException, FTPException, FTPDataTransferException, FTPAbortedException {
        con.Transacction();
        try{
            RHH_PERSONA persona = new RHH_PERSONA(con);
            String ci = request.getParameter("ci");
            persona=persona.Buscar(ci);
            String depto = request.getParameter("depto");
            String nombre1 = request.getParameter("nombre1");
            String nombre2 = request.getParameter("nombre2");
            String apepat = request.getParameter("apepat");
            String apemat = request.getParameter("apemat");
            String email = request.getParameter("email");
            String telf = request.getParameter("telf");
            String pass = request.getParameter("pass");
            Part part = request.getPart("curr");
            InputStream in = part.getInputStream();           

            if(part!=null && part.getSubmittedFileName().length()>0){
                String parrr="curriculum_"+part.getSubmittedFileName();
                persona.setCURRICULUM(parrr);
                subirftp(in, ci, "curriculum_"+part.getSubmittedFileName(), part.getSize(), "");
            }
            persona.setEMAIL(email);
            persona.setLUGAR_EMISION(depto);
            persona.setPRIMER_APELLIDO(apepat);
            persona.setPRIMER_NOMBRE(nombre1);
            persona.setSEGUNDO_NOMBRE(nombre2);
            persona.setSEGUNDO_APELLIDO(apemat);
            persona.setTELEFONO(telf);
            persona.Modificar();
            int idper=persona.getID();
            if(pass.length()>0){
                RHH_POSTULADO postulado=new RHH_POSTULADO(con).BuscarXPersona(idper);
                postulado.cambiarPass(pass);    
            }
            List<RHH_DATOS> dtlist = new RHH_DATOS(con).TodosDatos();
            SimpleDateFormat sd=new SimpleDateFormat("dd/mm/yyyy");
            RHH_PERSONA_DATOS pd = new RHH_PERSONA_DATOS(con);
            for (int i = 0; i < dtlist.size(); i++) 
            {
                pd = new RHH_PERSONA_DATOS(con);
                String dato = request.getParameter(dtlist.get(i).getID()+"");
                if(dato!=null)
                {
                    if(dato.length()>0)
                    {
                        
                        pd.Eliminar(idper,dtlist.get(i).getID());
                        pd.setID_DATOS(dtlist.get(i).getID());
                        pd.setID_PERSONA(idper);
                        pd.setDATO(dato);
                        pd.Insertar();
                    }
                }
            }
            List<RHH_DATOS> doclist = new RHH_DATOS(con).TodosDocs();

            for (int i = 0; i < doclist.size(); i++) 
            {
                pd = new RHH_PERSONA_DATOS(con);
                Part pdoc = request.getPart(doclist.get(i).getID()+"");
                String caduca = request.getParameter(doclist.get(i).getID()+"_o");
                if(pdoc!=null)
                {   
                    String nom = pdoc.getSubmittedFileName();
                    if(nom.length()>0)
                    {
                        pd.Eliminar(idper,doclist.get(i).getID());
                        if(caduca!=null && caduca.length()>0){
                            
                            pd.setCADUCIDAD(sd.parse(caduca));
                        }
                        pd.setID_DATOS(doclist.get(i).getID());
                        pd.setID_PERSONA(idper);
                        pd.setDATO(pdoc.getSubmittedFileName());
                        pd.Insertar();
                        in = pdoc.getInputStream();
                        subirftp(in, ci, pdoc.getSubmittedFileName(), pdoc.getSize(), "");
                    }
                }
            }                
            String anosexp = request.getParameter("anos");        
            String prof = request.getParameter("prof");

            RHH_PERSONA_PROFESION pf = new RHH_PERSONA_PROFESION(con);
            pf.setID_PERSONA(idper);
            pf.setID_PROFESION(Integer.parseInt(prof));
            pf.setANOS_EXPERIENCIA(Integer.parseInt(anosexp));
            pf.EliminarXid();
            pf.Insertar();
             
            Part part45 = request.getPart("file");
            if(part45!=null && part45.getSubmittedFileName().length()>0){
                InputStream in45 = part45.getInputStream();
                RHH_PERSONA per = new RHH_PERSONA(con).BuscarxID(idper);
                String nombre = "perfil_"+part45.getSubmittedFileName(); 
                long size = part45.getSize();
                subirftp(in45, per.getCI()+"", nombre, size,per.getFOTO());
                per.fotoperfil(nombre);        
                in45.close();
            }
            con.commit();
            return idper+"";
        }
        catch(Exception e)
        {
            con.rollback();
            return "false";
        }
    }
    private void subirftp(InputStream in, String ci, String nombre, long size,String old) throws IllegalStateException, IOException, FTPIllegalReplyException, FTPException, FTPDataTransferException, FTPAbortedException
    {
        if(in!=null && !nombre.equals(""))
        {
            FTPClient client = new FTPClient();          
            client.connect("servidor_ftp");
            client.login("postulado","oracle123");

            try{
                client.createDirectory(ci);
                client.changeDirectory(ci);
            }
            catch(Exception e)
            {
                client.changeDirectory(ci);
            }
            try{
                client.deleteFile(old);
            }catch(Exception e){}                
            client.upload(nombre, in, size, 0, null);

            client.disconnect(false);
        }       
    }
}

